/**
 * @Description: 自动化注册组件 同步/异步
 * @author 刘贵
 * @date 2021/04/05
 */

import Vue from 'vue'

// 加载公共组件（异步组件 如果组件层文件夹名称没有.sync则异步加载，组件名为文件夹名称）
// 取三层目录下的目标为组件 /components/**/**/**.vue
let context = require.context('../components/', true, /^\.\/[^/]+\/([^/.]+)(?!\.sync)\/([^/]+\.vue|component\.js|index\.js)$/i, 'lazy')
context.keys().map(fileName => {
  let componentName = fileName.replace(/.+\/([^/]+)\/[^/]+(\.vue|\.js)$/gi, '$1')
  Vue.component(componentName, () => context(fileName))
})

// 加载公共组件（同步组件 如果组件层文件夹名称有.sync则同步加载，组件名为去除.sync后的文件夹名称）
// 取三层目录下的目标为组件 /components/**/**.sync/**.vue
let contextSync = require.context('../components/', true, /^\.\/[^/]+\/([^/]+)(\.sync)\/([^/]+\.vue|component\.js|index\.js)$/i)
contextSync.keys().map(fileName => {
  let componentName = fileName.replace(/.+\/([^/]+).sync\/[^/]+(\.vue|\.js)$/gi, '$1')
  const file = contextSync(fileName)
  Vue.component(componentName, file.default || file)
})
